import pandas as pd

df = pd.read_csv('static/data/info_pre.csv')

def ticket_person_count_rate_plot():
    # 定义一个列表，用于存储票务数据分析
    ticket_person_count_rate = [
        # 定义一个字典，用于存储全票人数
        {
            'name': '全票人数(万人次)',
            # 计算全票人数的总和，并保留一位小数
            'value': round(df['全票人数(万人次)'].sum(), 1)
        },
        # 定义一个字典，用于存储优惠票人数
        {
            'name': '优惠票人数(万人次)',
            # 计算优惠票人数的总和，并保留一位小数
            'value': round(df['优惠票人数(万人次)'].sum(), 1)
        },
        # 定义一个字典，用于存储免票人数
        {
            'name': '免票人数(万人次)',
            # 计算免票人数的总和，并保留一位小数
            'value': round(df['免票人数(万人次)'].sum(), 1)
        },

    ]
    # 返回一个字典，包含票务数据分析
    return {
        'data': ticket_person_count_rate
    }


def revenue_rate_plot():
    # 定义一个列表，包含三个字典，分别表示门票收入、商品销售收入和其他收入
    revenue_rate = [
        {
            # 字典的键为'name'，值为'门票收入(万元)'
            'name': '门票收入(万元)',
            # 字典的键为'value'，值为门票收入的和，保留一位小数
            'value': round(df['门票收入(万元)'].sum(), 1)
        },
        {
            # 字典的键为'name'，值为'商品销售收入(万元)'
            'name': '商品销售收入(万元)',
            # 字典的键为'value'，值为商品销售收入的和，保留一位小数
            'value': round(df['商品销售收入(万元)'].sum(), 1)
        },
        {
            # 字典的键为'name'，值为'其他收入(万元)'
            'name': '其他收入(万元)',
            # 字典的键为'value'，值为其他收入的和，保留一位小数
            'value': round(df['其他收入(万元)'].sum(), 1)
        },

    ]
    # 返回一个字典，键为'data'，值为列表revenue_rate
    return {
        'data': revenue_rate
    }


def month_revenue_trend_plot():
    # 定义一个空列表，用于存储每个年份的营业收入
    month_revenue_trend = []
    # 遍历df中每个年份，将其作为key，对应的营业收入作为value，添加到month_revenue_trend列表中
    for i in df['年'].unique():
        month_revenue_trend.append({'name':i,'value':df[df['年'] == i].sort_values('月份')['营业收入(万元)'].values.tolist()})
    # 获取df中所有月份
    month = df['月份'].unique().tolist()
    # 返回一个字典，包含月份和对应的营业收入
    return {
        'label': month,
        'value': month_revenue_trend
    }


# 定义一个函数，用于绘制折线图
def person_count_rank_plot():
    # 筛选出年份为2023年的数据，并按照接待人数降序排序
    person_count_rank = df[df['年'] == '2023年'].sort_values('接待人数(万人次)', ascending=False)
    # 返回一个字典，包含月份和对应的接待人数
    return {
        'label': person_count_rank['月份'].tolist(),
        'value': person_count_rank['接待人数(万人次)'].tolist()
    }


# 定义一个函数，用于计算年增长率
def year_on_year_growth_rate():
    # 计算2023年的营业收入与2022年的营业收入增长率
    year_on_year_growth_revenue_rate = (df[df['年'] == '2023年']['营业收入(万元)'].sum() - df[df['年'] == '2022年'][
        '营业收入(万元)'].sum()) / df[df['年'] == '2022年']['营业收入(万元)'].sum()
    # 计算2023年的接待人数与2022年的接待人数增长率
    year_on_year_growth_person_rate = (df[df['年'] == '2023年']['接待人数(万人次)'].sum() - df[df['年'] == '2022年'][
        '接待人数(万人次)'].sum()) / df[df['年'] == '2022年']['接待人数(万人次)'].sum()
    # 返回结果，包括标签和增长率值
    return {
        'label': ['年营业收入', '年接待人数'],
        'value': [round(year_on_year_growth_revenue_rate * 100, 1), round(year_on_year_growth_person_rate * 100, 1)]
    }


# 定义一个函数，用于生成雷达图的数据
def month_person_count_radar_plot():
    # 创建一个列表，其中包含每个月份的免票人数（万人次）
    month_person_count_radar = [{'name':i,'value':df[df['年'] == i]['免票人数(万人次)'].values.tolist()} for i in df['年'].unique()]
    # 获取所有月份
    month = df['月份'].unique().tolist()
    # 获取免票人数的最大值
    count_max = df['免票人数(万人次)'].max()
    # 返回一个字典，其中包含月份、每个月份的免票人数（万人次）和最大值
    return {
        'label': month,
        'value': month_person_count_radar,
        'max': 10 ** (len(str(int(count_max))) - 1) * (int(str(int(count_max))[0]) + 1)
    }